<?php
class IndicadoresEntrega extends Controller
{
	private $_semanaArray;
	
	public function __construct()
	{
		parent::Controller();
		$this->load->model(array('encompany', 'pendienteentrega', 'enhistorico'));
		$this->load->library(array('chgraficos','chcalendario'));
		
	    $semana = $this->input->post('filtrosema') ? $this->input->post('filtrosema') : 9;
			      
	    $this->session->set_userdata('semAc',$semana);
		     
	    $this->_semanaArray = $this->chcalendario->semana($semana);
			 
		 for($i = $semana; $i >= 0; $i--){
		 		
		 	 $semana = date('W') - $i;
		 
		 	 if ($semana <= 0) {
		 			 $semana = 52 + $semana;
		 	 }
		  		  
		  }
		  
	}
	
	public function index()
	{
		
		 $this->load->view('second', array('content_page'  =>'entregaindicadoresview',
	        							 'menutop'         => 9,
		 								 'semanaFiltro'    => 9,
		                                 'semana'          => $this->_semanaArray,
		                                 'entregadosPend'  => $this->getCantidadServicios(),
		                                 'diasentrega'     => $this->promedioDeDiasEntrega(),
		 								 'cantidadComp'    => $this->getCompaniasEntregaVsCantidad(),
		 								 'porcentajentre'  => $this->getEntregaHistoricoActual()));
		 								
	}
	
	/**
	 * 
	 * Este methodo te permitira generar el grafico
	 * de la cantidad de servicios entregados semanalmente
	 * Vs la cantidad pasada para entrega de la misma semana.
	 */
	public function getCantidadServicios()
	{
		 $registros = array();
		 $strCat = "<categories>";
		 
		 foreach($this->_semanaArray as $semana => $fecha){
					 
		          $fechaI = $fecha[0];
		          $fechaF = $fecha[1];
		        
		          $semanaDetalle = explode("-", $semana);
		           
		          $strCat .= "<category label='" . $semanaDetalle[0]."'/>";
		          
		          $where = array('Fecha_Inicio_Entrega >=' =>$fechaI,
		                         'Fecha_Inicio_Entrega <=' =>$fechaF);
		          				
		          
		          
		          /**
		           * 
		           * Aqui obtengo la cantidad de companias que han sido entregada
		           * para luego hacer el rompimiento por semana.
		           * 
		           */
		          $cantidadEtregados = 0;
		          $cantidadEtregados = $this->encompany->getCantidad($where, 1);
		          
		          $registro[$semana]["cantidadservicios"] = $cantidadEtregados;
		          
		          /**
		           * 
		           * Aqui cargo las companias pendientes para entrega. para obtener la cantidad
		           * y hacer el rompimiento por semana.
		           *
		           */
		          $pendientes = 0;
		          $pendientes = $this->encompany->getCantidad($where, 0);
		          $registro[$semana]["pendientesentrega"] = $pendientes;
		          
		          
		    }
		  
		    $strCat .= "</categories>";
		 
		    $strEntregados = "<dataset seriesName='Cantidad Servicios Entregados'>";
		    $strPendientes = "<dataset  seriesName='Entregas Pendientes' parentYAxis='S'>";
	
		 
		    foreach ($registro as $semana){
		 	
		        $strEntregados  .= "<set value='".$semana["cantidadservicios"]."'/>";
		        $strPendientes  .= "<set value='".$semana["pendientesentrega"]."'/>";
		  
		    }
		 
		 	$strEntregados  .= "</dataset>";
		 	$strPendientes  .= "</dataset>";
		
		 
		    $strCat .= $strEntregados;
		    $strCat .= $strPendientes;
		             
     		
			$strXML  = "<chart palette='1' caption='Cantidad Servicios Entregados Vs Cantidad de Servicios Pasado a Entrega' showLabels='1' showvalues='0'  sYAxisValuesDecimals='2' connectNullData='0' PYAxisName='' SYAxisName='' numDivLines='4' formatNumberScale='0'>";
			$strXML .=$strCat;
			$strXML .= "</chart>";
			return $this->chgraficos->renderChartHTML(base_url()."public/swf_charts/MSColumn3DLineDY.swf", "ChartId54", $strXML, "sACsa", 470,250, 0, 0);
		
	}
	
	
	/**
	 * 
	 * Promedios de dias En la etapa de Entrega.
	 * 
	 */
    public function promedioDeDiasEntrega()
	{
		
            $target = 0;
		    $porcentaje = 0;
		 	
			$registro = array();
     		
     		$strCat  = "<categories>";

			foreach($this->_semanaArray as $semana => $fecha){

			   $cantidadSemana = count($this->_semanaArray);
			   
		       $fechaI = $fecha[0];
		       $fechaF = $fecha[1];
		       $filtroSemana ['inicial'] = $fechaI;
		       $filtroSemana ['final'] = $fechaF;

		       
		       $semanaDetalle = explode("-", $semana);
			     			
		       $strCat .= "<category label='".$semanaDetalle[0]."'/>"; 
		       
		       $registro[$semana]["promedio"] = $this->_promedioDias($fechaI, $fechaF);
		      
		       $target      = $registro[$semana]["promedio"];
		       $porcentaje += $target;
		       
		
			}
			
			
			$target = $porcentaje/$cantidadSemana;
	
			
			$strCat .= "</categories>";
		 
		    $strPromedio  = "<dataset  seriesName='Promedio de Dias'>";
		    
		    foreach ($registro as $semana){
		    	
		        $strPromedio  .= "<set value='".$semana["promedio"]."'/>";
		   
		    }
		 
		    $strPromedio  .= "</dataset>";
		 
		    $strCat .= $strPromedio;

		             
     		//aqui...
			$strXML  = "<chart caption='Promedio de Dias En Entrega' lineThickness='1' showValues='0' formatNumberScale='0' anchorRadius='2'   divLineAlpha='20' divLineColor='CC3300' divLineIsDashed='1' showAlternateHGridColor='1' alternateHGridColor='CC4400' shadowAlpha='40' labelStep='1' numvdivlines='5' chartRightMargin='35' bgColor='FFFFFF' bgAngle='270' bgAlpha='10,10' alternateHGridAlpha='5'  legendPosition ='RIGHT ' bordercolor='FFFFFF'>";
			$strTarg = "<trendlines> 
                          <line startValue='$target' color='#5FB404' displayValue='Target' showOnTop='2'/>
                       </trendlines></chart>";      	
		    $strXML .= $strCat.$strTarg;
		    return $this->chgraficos->renderChartHTML(base_url()."public/swf_charts/MSLine.swf", "ChartId54", $strXML, "sACsa", 470,250, 0, 0);
            
     }
    
     private function _promedioDias($fechaI, $fechaF)
     {
     	
    	       $horas = 0;
    	       $dias = 0;
    	       $diaFinalizacion = 0;
    	       $cantidadRegistros = 0;
    	      
               $where = array('Fecha_Inicio_Entrega >=' =>$fechaI,
		                      'Fecha_Inicio_Entrega <=' =>$fechaF);
		       				  	   

		       $companias = $this->encompany->loadCompaniasWhere($where, 1);
		       
		       /*Si no encuentra nada en la fecha retorna 0*/
		       if (!is_array($companias)){
		             return 0;
		       }
               
		       $cantidadRegistros = 0;

		       
		       foreach ($companias as $cantidad){

		       	   $diaFinalizacion = $this->enhistorico->loadCompaniaById($cantidad->getIdReferencia());
		       	   
		       	   $horas += $this->chcalendario->calcularHoras($cantidad->getFechaInicioEntrega(), $diaFinalizacion->getDate());
		       	    
		       	   $dias = $horas/24;
		       	   ++$cantidadRegistros;  
		       	  
		       }

		        return ($cantidadRegistros == 0) ? 0:number_format($dias/$cantidadRegistros,2);
		        
     	}
     	
     	
      public function getCompaniasEntregaVsCantidad() 
	  {
	  	
	  	 $totalmenorcuarteycinco = 0;
	 	 $totalhastasesenta = 0;
	 	 $totalhatanueventa = 0;
	 	 $mayordenueveinta = 0;
	  	 $dias = 0;
	  	
	  	 
	     $strXML = "<chart caption = 'Cantidad de Compa&ntilde;ias en dias de Antiguedad' baseFontSize='11' showValues='1' xAxisName=''>";
		  
	
         $cantidadEntrega = $this->encompany->loadCompany();
         
         foreach($cantidadEntrega as $companias){
         	
         	
         	        $dias  = $this->chcalendario->calcularDias($companias->getFechaInicioEntrega());
         	        
         	        if($dias <= 45){
         	        	
         	        	$totalmenorcuarteycinco++;
         	        
         	        }elseif($dias >= 45 && $dias <= 60){
         	        
         	        	$totalhastasesenta++;
         	        	
         	        }elseif ($dias >= 61 && $dias <= 90){
         	        	
         	        	$totalhatanueventa++;
         	        	
         	        }elseif($dias > 91){
         	        	
         	        	$mayordenueveinta++;
         	        
         	        }
         	      
         }
    
         $strXML .= "<set label = 'Menor 45' value ='".$totalmenorcuarteycinco."' color='#afeeee'/>";
		 $strXML .= "<set label = 'De 45 a 60 Dias' value ='".$totalhastasesenta."' color='#89942c'/>";
		 $strXML .= "<set label = 'De 61 a 90 Dias' value ='".$totalhatanueventa."' color='#FAE421'/>";
		 $strXML .= "<set label = 'Mayor de 91 Dias' value ='".$mayordenueveinta."' color='#FF5252'/>";
		
		 $strXML .= "</chart>";
		
		 return $this->chgraficos->renderChartHTML ( base_url () . "public/swf_charts/Pie3D.swf", "ChartId5", $strXML, "Pizza", 475, 250, false );
	 
	  }
	  
	  
	  public function getEntregaHistoricoActual()
	  {
	  	
	  	     $strCat = "<categories>";
	  	     
	         $cantidadCompanias = 0;
     		 $cantidad1 = 0;
     		 $cantidad2 = 0;
     		 $cantidad3 = 0;
     		 $cantidad4 = 0;
     		 
   	         $entregas = $this->encompany->loadCompany();

   	         foreach ($entregas as $compania){
   	         
   	         $dias = $this->chcalendario->calcularDias($compania->getFechaInicioEntrega());
		          	   
		     if($dias <= 45){

                  $cantidad1++;
                  
		      }elseif($dias >= 90 && $dias <= 134){
		      	
		      	  $cantidad2++;
		      
		      }elseif($dias >= 135 && $dias <= 179){
		      	
		          $cantidad3++;
		          
		      }elseif($dias > 180){
		      	
		           $cantidad4++;
		      }
            
   	            $cantidadCompanias++;
   	            
   	           
   	         }

		     $strCat .= "<category label=''/>";
				
		          $strCat .= "</categories>";
		 		
		          
		          $menor         = "<dataset seriesName='45 - 89'>";
		          $mayordecua    = "<dataset seriesName='90 - 134'>";
		          $mayornoven    = "<dataset seriesName='135 - 179'>";
		          $mayordecient  = "<dataset seriesName='180 mas 45'>";
		         
					
		         
		          $menor        .= "<set value ='".number_format(($cantidad1/$cantidadCompanias * 100), 2)."'/>";
		          $mayordecua   .= "<set value ='".number_format(($cantidad2/$cantidadCompanias * 100), 2)."'/>";
		    	  $mayornoven   .= "<set value ='".number_format(($cantidad3/$cantidadCompanias * 100), 2)."'/>";
		    	  $mayordecient .= "<set value ='".number_format(($cantidad4/$cantidadCompanias * 100), 2)."'/>";
		    	 
		      
			
		          $menor        .= "</dataset>";
		          $mayordecua   .= "</dataset>";
		          $mayornoven   .= "</dataset>";
		          $mayordecient .= "</dataset>";
		         
		     
		          
		          $strCat .= $menor;
		          $strCat .= $mayordecua;
				  $strCat .= $mayornoven;
				  $strCat .= $mayordecient;
				
			
		             
				  $strXML  = "<chart palette='1' caption='Porcentaje de Entrega' showLabels='1' showvalues='0' connectNullData='0' PYAxisName='' SYAxisName='' numberSuffix='%2525' numDivLines='4' formatNumberScale='0'>";
				  $strXML .=$strCat;
				  $strXML .= "</chart>";
				  return $this->chgraficos->renderChartHTML(base_url()."public/swf_charts/MSColumn3DLineDY.swf", "ChartId54", $strXML, "sACsa", 475,250, 0, 0);
	
	  	   
	  }
	             
}
